iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

第一次學Web Service的經驗談系列 第 10

Day10主題:認識資料傳遞(1)

  • 分享至 

  • xImage
  •  

在了解Model、View及Controller的特性之後,接下來就是會遇到在撰寫程式時,常會遇到需要將資料【由Controller傳遞到View】判斷或是【由View回傳資料到Controller】進行處理的情形,就會需要進行資料傳遞。

首先來說明【由Controller傳遞到View】的方式,分為以下幾種:

  1. 單Model資料傳遞:只有一組Model資料傳遞。

    • Controller:將資料表內容利用ViewBag或ViewData方式儲存起來。

      public ActionResult DemoModel()
      {
          ViewBag.students=db.Student.Where(c=>c.classID==1).ToList();
          return View();
      }
      
    • View:宣告變數將ViewBag的內容接收。

      <h3>單Model資料傳遞<h3>
      <ul>
          @foreach(var item in ViewBag.students as List<DemoMVC.Models.Student>){
          <li>
              @item.name
          <li>
          }
      </ul>
      
  2. 多Model資料傳遞:

    • Model:新增一ViewModel類別,內容為多資料來源。

      public class ClassStudentViewModel
      {
          public Class class{get;set;}
          public IEnumerable<Student> students{get;set;}
      }
      
    • Controller:宣告該Model並指定內容回傳。

      public ActionResult DemoViewModel()
      {
          ClassStudentViewModel viewmodel = new ClassStudentViewModel();
          viewmodel.class = db.Class.ElementAt(1);
          viewmodel.students = db.Student.Where(c=>c.classID==1).ToList();
          return View(viewmodel);
      }
      
    • View:宣告Model來源後,可直接引用。

      @model DemoApp.Models.ViewModels.ClassStudentViewModel
      
      <h3>@Model.class.name</h3>
      <ul>
          @foreach(var item in Model.students){
          <li>
              @item.name
          </li>
          }
      </ul>
      
  3. Tuple類別:類似Model資料傳遞。

    • Controller:宣告一組Tuple,指定型態並填入內容。

      public ActionResult DemoTuple()
      {
          var class=db.Class.ElementAt(1);
          var students=db.Student.Where(c=>c.classId==1).ToList();
          //以下兩者寫法皆可
          var tupleModel=new Tuple<Class,List<Student>>(class,students);
          //var tupleModel=Tuple.Create(class,students);
          return View(tupleModel);
      }
      
    • View:宣告Model來源後,可直接引用

      @using DemoApp.Models;
      @model Tuple<Class,List<Student>>
      
      @* Item1 -> Class *@
      <h3>@Model.Item1.name</h3>
      <ul>
          @* Item2 -> List<Student> *@
          @foreach(var item in Model.Item2){
              <li>
                  @item.name
              </li>
          }
      </ul>
      

好的,今天就先到這兒,明天再來繼續吧!

參考來源:
[Asp .Net MVC] Controller and View 2 - 資料傳遞篇


上一篇
Day09主題:認識Controller
下一篇
Day11主題:認識資料傳遞(2)
系列文
第一次學Web Service的經驗談31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言